Filter out duplicate application shortcuts
authorMatthias Clasen <mclasen@redhat.com>
Sun, 10 Nov 2013 00:01:27 +0000 (19:01 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 10 Nov 2013 00:01:27 +0000 (19:01 -0500)
The file chooser used to do this, the places sidebar
still needs to learn it.

https://bugzilla.gnome.org/show_bug.cgi?id=711636

gtk/gtkplacessidebar.c

index ab1db3691fbdaed43653d6a6cd7d4c5d9cea310c..7401aa33312770e6caf2c23aeba20a1b0fa32a1e 100644 (file)
@@ -671,6 +671,38 @@ should_show_file (GtkPlacesSidebar *sidebar,
   return FALSE;
 }
 
+static gboolean
+file_is_shown (GtkPlacesSidebar *sidebar,
+               GFile            *file)
+{
+  GtkTreeIter iter;
+  gchar *uri;
+
+  if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (sidebar->store), &iter))
+    return FALSE;
+
+  do
+    {
+      gtk_tree_model_get (GTK_TREE_MODEL (sidebar->store), &iter,
+                          PLACES_SIDEBAR_COLUMN_URI, &uri,
+                          -1);
+      if (uri)
+        {
+          GFile *other;
+          gboolean found;
+          other = g_file_new_for_uri (uri);
+          g_free (uri);
+          found = g_file_equal (file, other);
+          g_object_unref (other);
+          if (found)
+            return TRUE;
+        }
+    }
+  while (gtk_tree_model_iter_next (sidebar->store, &iter));
+
+  return FALSE;
+}
+
 static void
 add_application_shortcuts (GtkPlacesSidebar *sidebar)
 {
@@ -686,6 +718,9 @@ add_application_shortcuts (GtkPlacesSidebar *sidebar)
       if (!should_show_file (sidebar, file))
         continue;
 
+      if (file_is_shown (sidebar, file))
+        continue;
+
       /* FIXME: we are getting file info synchronously.  We may want to do it async at some point. */
       info = g_file_query_info (file,
                                 "standard::display-name,standard::symbolic-icon",